﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using LM.Negocio.Objetos;

namespace LM.Repositorios.Maps
{
    class EnderecoMap : EntityTypeConfiguration<Endereco>
    {
        public EnderecoMap()
        {            

            // Primary Key
            this.HasKey(t => t.Codigo);            

            this.Property(t => t.Logradouro)
                .IsRequired();

            this.Property(t => t.Quadra)
                .IsRequired()
                .HasMaxLength(50);

            this.Property(t => t.Bairro)
                .IsRequired();

            this.Property(t => t.Complemento)
                .IsRequired();

            this.Property(t => t.Cep)
                .IsRequired();

            this.Property(t => t.Cidade)
                .IsRequired();

            this.Property(t => t.Uf)
                .IsRequired()
                .IsFixedLength()
                .HasMaxLength(2);

            // Table & Column Mappings
            this.ToTable("Endereco");
            this.Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("Id"); 
            this.Property(t => t.Codigo).HasColumnName("Codigo");
            this.Property(t => t.Logradouro).HasColumnName("Logradouro");
            this.Property(t => t.Numero).HasColumnName("Numero");
            this.Property(t => t.Lote).HasColumnName("Lote");
            this.Property(t => t.Quadra).HasColumnName("Quadra");
            this.Property(t => t.Bairro).HasColumnName("Bairro");
            this.Property(t => t.Complemento).HasColumnName("Complemento");
            this.Property(t => t.Cep).HasColumnName("Cep");
            this.Property(t => t.Cidade).HasColumnName("Cidade");
            this.Property(t => t.Uf).HasColumnName("Uf");
            this.Property(t => t.ClienteId).HasColumnName("ClienteId");

            // Relationships
            this.HasRequired(t => t.Cliente)
                .WithMany(t => t.Enderecos)
                .HasForeignKey(d => d.ClienteId);

        }
    }
}
